// 很显然, 刚才的算法已经很科学了, 但是由于数据量是十万, 我们的第二个for循环每次都回溯, 这显然是浪费了时间
// 如果第一次是a+ b + c 满足了要求, 所以说 b + c 可能满足要求, 但是只是一个b 肯定不满足要求, 它都加了a还不满足要求呢
// 所以优化算法的核心是进行前缀和, 然后分为左右双指针, 这样效率会高很多, 避免了回溯, 特别是k的值很大, 需要好多个数据,
// 才能凑成k时, 这种回溯, 无疑是很耗时的
const readline = require("readline");
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
let n,k; // n表示数字个数, k表示连续和
let initArr = [];
rl.on("line", (line)=>{
    if(n === undefined) {
        [n, k] = line.trim().split(" ").map(Number)
    } else {
        initArr = line.trim().split(" ").map(Number)
        console.log(getResult(n, k, initArr))

        // clear
        n = k = undefined
        initArr.length = 0

    }
})

function getResult(n, k, initArr) {
    let count = 0
    let presSum = [0]
    for (let i = 1; i < initArr.length; i++) {
        presSum.push(presSum.at(-1) + initArr[i])
    }

    let l = 0
    let r = 0
    while(l < initArr.length && r < initArr.length && l <= r) {
        let sum = presSum[r] + initArr[r] - presSum[l]
        if(sum >= k) {
            count+=  (initArr.length - r)
            l++
        } else {
            r++
        }
    }
    return count
}